package com.itheima.config;

import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.context.annotation.Bean;

import javax.sql.DataSource;

public class MybatisConfig {
        /*
     <bean class="org.mybatis.spring.SqlSessionFactoryBean">
       <!--必须有-->
       <property name="dataSource" ref="dataSource"/>
       <!--配置别名-->
       <property name="typeAliasesPackage" value="com.itheima.bean"/>
       <!--配置mybatis的核心配置文件的位置，核心配置文件中也可以设置别名、映射文件位置等操作-->
       <!--<property name="configLocation" value="classpath:MybatisConfig.xml"/>-->
       <!--如果映射文件和mapper接口在同一个包下-->
       <!--<property name="mapperLocations" value="classpath:StudentMapper.xml"/>-->
     </bean>
     */
    @Bean  // 这个是第三方的类 所以需要写配置类
    public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();

        // 设置参数
        sqlSessionFactoryBean.setDataSource(dataSource);
        sqlSessionFactoryBean.setTypeAliasesPackage("com.itheima.bean");

        return sqlSessionFactoryBean;
    }

    /*<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">

        <!--作用：
            1、负责扫描dao/maper接口的包，生成接口的代理对象，存到spring容器
           2、扫描dao所在的包中是否有对应的映射文件，如果没有就无法执行sql。如果是使用注解配置SQL语句，就会扫描接口中的注解
    说明：如果映射文件和接口不在同一个包中，那么就需要单独配置映射文件的位置或者核心配置文件的位置(核心配置文件中可以加载映射文件)
       -->
        <property name="basePackage" value="com.itheima.mapper"/>
    </bean>*/

    @Bean  // 这个类 负责 扫描 mapper接口的包 并存到spring容器中
    public MapperScannerConfigurer mapperScannerConfigurer(){
        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();

        mapperScannerConfigurer.setBasePackage("com.itheima.mapper");
        return mapperScannerConfigurer;
    }
}
